<?php
namespace Common\Model;
use Common\Model\CommonModel;

/**
 * 对MySQL数据库、表及字段的操作类
 * Class ModelFieldModel
 * @package Common\Model
 */
class MySqlModel extends CommonModel
{
	protected $tableName='model';

	/**
	 * 修改表名
	 * @param $table_name
	 * @param $new_table_name
	 * @return false|int
	 */
	function updateTableName($table_name,$new_table_name){
		$sql="ALTER TABLE ".$this->tablePrefix.$table_name." RENAME ".$this->tablePrefix.$new_table_name ;
		return $this->execute($sql);
	}

	/**
	 * 创建表
	 * @param string $table_name
	 * @param string $model_name
	 * @param string $engine_type
	 * @return false|int 返回结果不为false 都是成功
	 */
	function createTable($table_name,$model_name="",$engine_type="MyISAM"){
		$sql="CREATE TABLE `".$this->tablePrefix.$table_name."` (`".$table_name."_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '$model_name',".
			 "`post_author` bigint(20) unsigned DEFAULT '0' COMMENT '发表者id', `post_keywords` varchar(150) NOT NULL COMMENT 'seo keywords', `post_source` varchar(150) DEFAULT NULL COMMENT '转载文章的来源', `post_date` datetime DEFAULT '2000-01-01 00:00:00' COMMENT 'post发布日期', `post_content` longtext COMMENT 'post内容', `post_title` text COMMENT 'post标题', `post_excerpt` text COMMENT 'post摘要', `post_status` int(2) DEFAULT '1' COMMENT 'post状态，1已审核，0未审核,3删除', `comment_status` int(2) DEFAULT '1' COMMENT '评论状态，1允许，0不允许', `post_modified` datetime DEFAULT '2000-01-01 00:00:00' COMMENT 'post更新时间，可在前台修改，显示给用户', `post_content_filtered` longtext, `post_parent` bigint(20) unsigned DEFAULT '0' COMMENT 'post的父级post id,表示post层级关系', `post_type` int(2) DEFAULT '1' COMMENT 'post类型，1文章,2页面', `post_mime_type` varchar(100) DEFAULT '', `comment_count` bigint(20) DEFAULT '0', `smeta` text COMMENT 'post的扩展字段，保存相关扩展属性，如缩略图；格式为json', `post_hits` int(11) DEFAULT '0' COMMENT 'post点击数，查看数', `post_like` int(11) DEFAULT '0' COMMENT 'post赞数', `istop` tinyint(1) NOT NULL DEFAULT '0' COMMENT '置顶 1置顶； 0不置顶', `recommended` tinyint(1) NOT NULL DEFAULT '0' COMMENT '推荐 1推荐 0不推荐', `font_family` varchar(64) NOT NULL DEFAULT '宋体' COMMENT '字体',".
			 "PRIMARY KEY (`".$table_name."_id`)) ENGINE=$engine_type DEFAULT CHARSET=utf8 COMMENT='$model_name';";
		return $this->execute($sql);
	}

	/**
	 * 删除表
	 * @param $table_name
	 * @return false|int
	 */
	function dropTable($table_name){
		$sql="DROP TABLE ".$table_name;
		return $this->execute($sql);
	}

	/**
	 * 判断数据库中是否存在某个表
	 * @param string $table_name
	 * @return false|int   0为不存在，大于0为存在
	 */
	function table_exist($table_name){
		$sql='show tables like "'.$this->tablePrefix.$table_name.'"';
		return $this->execute($sql);
	}

	/**
	 * 添加字段(单个字段)
	 * @param $field
	 * @param string $table_name
	 * @param string $type_length
	 * @param string $default
	 * @param string $is_null
	 * @return false|int
	 */
	function addField($field,$table_name,$type_length=" varchar(64) ",$default="",$is_null=" NOT NULL "){
		$sql="ALTER TABLE ".$this->tablePrefix.$table_name." ADD ".$field."  ".$type_length." DEFAULT '$default' ".$is_null;
		return $this->execute($sql);
	}

	/**
	 * 更新一个字段
	 * @param $field
	 * @param $new_field
	 * @param string $table_name
	 * @param string $type_length
	 * @param string $default
	 * @param string $is_null
	 * @return false|int
	 */
	function updateField($field,$new_field,$table_name,$type_length="",$default="",$is_null=" NOT NULL "){
		// alter table table_name change old_field_name new_field_name field_type;
		$sql="ALTER TABLE ".$this->tablePrefix.$table_name." CHANGE ".$field." ".$new_field.$type_length." DEFAULT '$default'".$is_null;
		return $this->execute($sql);
	}

	/**
	 * 删除一个字段
	 * @param $field
	 * @param $table_name
	 * @return false|int
	 */
	function dropField($field,$table_name){
		// alter table table_name drop field_name;
		if($this->field_exist($table_name,$field)<1){
			return true;
		}
		$sql="ALTER TABLE ".$this->tablePrefix.$table_name." drop ".$field;
		return $this->execute($sql);
	}

	/**
	 * 判断某个字段是否存在
	 * @param $table_name
	 * @param $field
	 * @return false|int 0为不存在，大于0为存在
	 */
	function field_exist($table_name,$field){
		$sql=" desc ".$this->tablePrefix.$table_name ." ".$field;
		return $this->execute($sql);
	}

	/**
	 * 获取表字段
	 * @param $table 不带表前缀
	 * @return array
	 */
	public function get_all_fields($table) {
		$fields = array();
		$table = C("DB_PREFIX") . $table;
		$data = $this->execute("SHOW COLUMNS FROM $table");
		foreach ($data as $v) {
			$fields[$v['Field']] = $v['Type'];
		}
		return $fields;
	}











}

